const Mock = require('mockjs')
const { BaseController } = require('../Base')

class MockData extends BaseController {
    constructor() {
        super()
        this.cityList = []
    }
    // 获取城市列表json
    getCityList() {
        if (!this.cityList.length) {
            this.cityList = require('../assets/cityList.json')
        }
        return this.cityList
    }
    // 城市列表
    getArea(ctx) {
        const pid = ctx.pid || 0
        return this.getCityList().filter(item => item.pid == pid)
    }
    // 获取所有城市列表[树状]
    getAreaAll() {
        return this.tools.jcore.toTree(this.getCityList())
    }
    // 用户列表
    userList(ctx) {
        let pageSize = ctx.pageSize || 10
        let result = Mock.mock({
            [`data|${pageSize}`]: [{
                'id|+3': 99,    // id
                'name': '@cname()', // 名字
                'age|10-99': 1, // 年龄
                'gender|1-2': 1, // 性别
                'status|0-3': 1, // 状态
                'headerImg|1-3': ['@image("150x150")'], // 头像
                'content': '@cparagraph(1)', // 简介
                'createTime|1546300800-1640908800': 1 // 创建时间2019-01-01 ~ 2021-12-31
            }]
        })
        return result.data
    }
    // 列表数据 - [主要用于mockjs测试]
    listData(ctx) {
        let count = ctx.count || 10
        let result = Mock.mock({
            [`data|${count}`]: [{
                'id': '@id()',                  // 18位字符型id
                'ip': '@ip()',                  // ipv4
                'guid': '@guid()',              // 全局唯一guid
                'name': '@name()',              // 英文姓名
                'cname': '@cname()',            // 中文姓名
                'cfirst': '@cfirst()',          // 中文姓
                'province': '@province()',      // 省
                'city': '@city()',              // 市
                'county': '@county()',          // 区县
                'addressInfo': Mock.Random.county(true), // 省市县级联  @county(true) 与上面的county冲突了 不能一起写
                'ctitle': '@ctitle(3,10)',      // 中文标题3-10个字
                'cword': '@cword(8,20)',        // 中文文章8-20个字
                'cparagraph': '@cparagraph(1,3)', // 中文句子1-3句
                'title': '@title(1,3)',         // 英文标题1-3个    英文文章和句子类似于中文的只是去掉c即可
                'hex': '@hex()',                // hex颜色
                'rgb': '@rgb()',                // rgb颜色
                'now': '@now()',                // 当前时间
                'datetime': '@datetime("yyyy-MM-dd HH:mm:ss")', // 随机时间 可设置格式
                'headerImg|1-3': ['@image("150x150", @hex())'], // 头像 Random.image( size?, background?, foreground?, format?, text? )
                'range': '@range(2, 20, 2)',    // 数列Random.range( start, stop, step )
                'string': '@string(3,10)',      // 字符串3-10个字里面有字母标点等
                'float': '@float(10,500)',      // 10-500之间的浮点数
                'number|10-999': 1,             // 10-999之间的整数
                'numberAuto|+2': 2              // 输出整数初始为2每次自增2
            }]
        })
        return result.data
    }
}

const ex = new MockData
module.exports = ex